package com.tedu.api;

import org.junit.Test;

/**API
 *String字符串类 不可改变类 BUG
 *假设: 10000000个String类---内存
 * 操作系统发现内存如果越来越小，会在硬盘上开辟空间--软件会卡
 * 建议:存储字符串类似---String
 *
 *
 * 可变的字符串
 * StringBuilder类 创建字符串随时进行改变 【修改、增加、插入]
 * String不可改变的类，频繁创建对象，带来内存损耗
 *  StringBuilder类解决内存损耗
 * 创建方式: StringBuilder sb=new StringBuilder();
 *
 *
 * C语言	   好处：创建对象，随时对对象进行销毁
 *         例如：定义变量：int a=malloc(4);开辟4个字节空间
 *                       a=1;
 *                       free(a);清理内存
 * Java语言  好处:创建完对象，不用管，等GC垃圾回收机制，进行回收
 *          例如:定义变量 int a=1;开辟空间，交给GC【使用方便】
 */
public class StringBuilderAPI {
    /**
     * java.lang包下
     *StringBuilder可变的字符串对象类
     * 什么情况下使用:有大量字符串拼接，建议StringBuilder
     * 	 String str="123" String s="456" str+s出现新对象
     * append() 方法:拼接，等同于String加号意思
     */
    @Test
    public void textStringBuilderAPI(){
        String str="你是我的";
        //创建一个空字符串，接收传入字符串【原有字符串上大量拼接】
        StringBuilder sb=new StringBuilder(str);//不会产生新对象
        sb.append("小可爱");
        System.out.println("原来的对象："+sb);
    }


    /**
     *StringBuilder可变的字符串
     * replace(开始坐标，结束坐标，替换字符串)替换含头不含尾
     * 作用:可以将字符串中指定范围的内存替换成给定字符串
      */
@Test
    public void testReplace(){
    StringBuilder sb=new StringBuilder("你就是我的，小可爱");
    sb.replace(6,9,"小baby");
    System.out.println("SB替换后："+sb);
}
    /**
     * StringBuilder与StringBuffer---可变字符串类【用法完全一致]
     * append方法、replace方法、insert方法通用
     * insert()方法 返回值String
     * 作用:将给定字符串插入到当前字符串中
     */
    @Test
    public void testInsert(){
        StringBuffer sb=new StringBuffer("你都是我的小可爱");
        sb=sb .insert(0,"从今以后得每天");
        System.out.println("插入后字符串:"+sb);}



}



















